package com.intelligent.system.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;

/**
 * 消息实体类
 */
@Data
@TableName("SYS_MESSAGE")
public class Message {
    
    /**
     * 消息ID
     */
    @TableId(type = IdType.INPUT)
    private Long id;
    
    /**
     * 消息类型
     * 1: 系统通知
     * 2: 业务消息
     * 3: 告警消息
     * 4: 操作日志
     * 5: 广播消息
     */
    @TableField("MESSAGE_TYPE")
    private String type;
    
    /**
     * 消息数据（JSON格式）
     */
    @TableField("MESSAGE_DATA")
    private String data;
    
    /**
     * 消息时间戳
     */
    @TableField("TIMESTAMP")
    private Long timestamp;
    
    /**
     * 客户端ID
     */
    @TableField("CLIENT_ID")
    private String clientId;
    
    /**
     * 消息状态（0:未读 1:已读）
     */
    @TableField("STATUS")
    private Integer status;
    
    /**
     * 消息标题
     */
    @TableField("TITLE")
    private String title;
    
    /**
     * 消息内容
     */
    @TableField("CONTENT")
    private String content;
    
    /**
     * 消息来源
     */
    @TableField("SOURCE")
    private String source;
    
    /**
     * 消息级别（1:普通 2:重要 3:紧急）
     */
    @TableField("LEVEL")
    private Integer level;
    
    /**
     * 接收者ID（广播消息时为null）
     */
    @TableField("RECEIVER_ID")
    private Long receiverId;
    
    /**
     * 发送者ID
     */
    @TableField("SENDER_ID")
    private Long senderId;
    
    /**
     * 广播范围（1:全部 2:指定角色 3:指定部门 4:指定用户组）
     */
    @TableField("BROADCAST_SCOPE")
    private Integer broadcastScope;
    
    /**
     * 广播目标（JSON数组，根据broadcastScope存储不同的目标ID列表）
     * 例如：角色ID列表、部门ID列表、用户组ID列表
     */
    @TableField("BROADCAST_TARGETS")
    private String broadcastTargets;
    
    /**
     * 是否广播消息（0:否 1:是）
     */
    @TableField("IS_BROADCAST")
    private Integer isBroadcast;
    
    /**
     * 广播开始时间
     */
    @TableField("BROADCAST_START_TIME")
    private LocalDateTime broadcastStartTime;
    
    /**
     * 广播结束时间
     */
    @TableField("BROADCAST_END_TIME")
    private LocalDateTime broadcastEndTime;
    
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    
    /**
     * 创建者
     */
    @TableField("CREATE_BY")
    private String createBy;
    
    /**
     * 更新者
     */
    @TableField("UPDATE_BY")
    private String updateBy;
    
    /**
     * 备注
     */
    @TableField("REMARK")
    private String remark;
} 